<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<title>module Minitest::Spec::DSL - minitest: Ruby Standard Library Documentation</title>


<script src="../../js/navigation.js" defer></script>
<script src="../../js/search.js" defer></script>
<script src="../../js/search_index.js" defer></script>
<script src="../../js/searcher.js" defer></script>
<script src="../../js/darkfish.js" defer></script>

<script src="../../js/jquery-3.2.0.min.js"></script>

<script src="../../js/vue.min.js"></script>
<script src="../../js/js.cookie.min.js"></script>

<link href="../../css/fonts.css" rel="stylesheet">
<link id='rdoccss' href="../../css/rdoc.css" rel="stylesheet">
<link href="../../css/carbon17.css" rel="stylesheet">

<script type="text/javascript">
  var rdoc_rel_prefix = "../../";
  var index_rel_prefix = "../../";
  var darkModeCsseHref = "../../css/rdoc-dm.css"
  var defaultModeCssHref = "../../css/rdoc.css"
  // var cssDarkmode = Cookies.get('darkmode');
  
  if( Cookies.get("darkmode") == "true") {
	$('#rdoccss').attr("href", darkModeCsseHref);
}

//  https://cssdeck.com/blog/simple-jquery-stylesheet-switcher/

document.write('<style type="text/css">body{display:none}</style>');

</script>


</head>
<body id="top" role="document" class="module">
  <!-- this is class.html -->

  <div id='actionbar' >
    <div class='wrapper mdiv'>
      <ul class='grids g0'></ul>
    </div> 
    <!-- VERSION HEADER for 3.3.0.preview2 NOT FOUND -->
  </div> <!-- end action bar -->

  <div class='wrapper hdiv'>

    


    <nav id='vapp' role="navigation">
    <div id="project-navigation">
      <div id="home-section" role="region" title="Quick navigation" class="nav-section">
  <h2><a href="../../index.html" rel="home">Home</a></h2>

  <div id="table-of-contents-navigation"  >
    <a href="../../table_of_contents.html#pages">Pages</a>
    <a href="../../table_of_contents.html#classes">Classes</a>
    <a href="../../table_of_contents.html#methods">Methods</a>
  </div>
</div>

      <div id="search-section" role="search" class="project-section initially-hidden">
  <form action="#" method="get" accept-charset="utf-8">
    <div id="search-field-wrapper">
      <input id="search-field" role="combobox" aria-label="Search"
             aria-autocomplete="list" aria-controls="search-results"
             type="text" name="search" placeholder="Search" spellcheck="false"
             title="Type to search, Up and Down to navigate, Enter to load">
    </div>

    <ul id="search-results" aria-label="Search Results"
        aria-busy="false" aria-expanded="false"
        aria-atomic="false" class="initially-hidden"></ul>
  </form>
</div>

    </div>


    

    <button id='toggleThing' @click="toggleNav()" >Show/hide navigation</button>
    <div :class="isOpen ? 'block' : 'hidden' " id='toggleMe'>
      <div id="class-metadata">
        
        
        
        
        
<!-- Method Quickref -->
<div id="method-list-section" class="nav-section">
  <h3>Methods</h3>

  <ul class="link-list" role="directory">
    <li class="calls-super" ><a href="#method-i-after">#after</a>
    <li class="calls-super" ><a href="#method-i-before">#before</a>
    <li ><a href="#method-i-it">#it</a>
    <li ><a href="#method-i-let">#let</a>
    <li ><a href="#method-i-register_spec_type">#register_spec_type</a>
    <li ><a href="#method-i-spec_type">#spec_type</a>
    <li ><a href="#method-i-specify">#specify</a>
    <li ><a href="#method-i-subject">#subject</a>
  </ul>
</div>

      </div>
     </div>
    </nav>


    <div id='extraz'><div class='adzbox-index'  >
      
     </div>         
    </div>

    <main role="main" aria-labelledby="module-Minitest::Spec::DSL">
    <h1 id="module-Minitest::Spec::DSL" class="module">
      module Minitest::Spec::DSL
    </h1>

    <section class="description">
    
<p>Oh look! A <a href="DSL.html"><code>Minitest::Spec::DSL</code></a> module! Eat your heart out DHH.</p>

    </section>

      <section id="5Buntitled-5D" class="documentation-section">


      <section class="constants-list">
      <header>
      <h3>Constants</h3>
      </header>
      <dl>
          <dt id="TYPES">TYPES
          <dd><p>Contains pairs of matchers and <a href="../Spec.html"><code>Spec</code></a> classes to be used to calculate the superclass of a top-level describe. This allows for automatically customizable spec types.</p>

<p>See: <a href="DSL.html#method-i-register_spec_type"><code>register_spec_type</code></a> and <a href="DSL.html#method-i-spec_type"><code>spec_type</code></a></p>
        </dl>
        </section>



                <section id="public-instance-5Buntitled-5D-method-details" class="method-section">
                <header>
                <h3>Public Instance Methods</h3>
                </header>

                  <div id="method-i-after" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">after</span><span
                                class="method-args">(_type = nil, &amp;block)</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Define an ‘after’ action. Inherits the way normal methods should.</p>

<p>NOTE: <code>type</code> is ignored and is only there to make porting easier.</p>

<p>Equivalent to <a href="../Test/LifecycleHooks.html#method-i-teardown"><code>Minitest::Test#teardown</code></a>.</p>
                                <div class="method-calls-super">
                                  Calls superclass method
                                  
                              </div>

                              <div class="method-source-code" id="after-source">
            <pre><span class="ruby-comment"># File minitest-5.20.0/lib/minitest/spec.rb, line 205</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">after</span> <span class="ruby-identifier">_type</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
  <span class="ruby-identifier">define_method</span> <span class="ruby-value">:teardown</span> <span class="ruby-keyword">do</span>
    <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_eval</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
    <span class="ruby-keyword">super</span>()
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-before" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">before</span><span
                                class="method-args">(_type = nil, &amp;block)</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Define a ‘before’ action. Inherits the way normal methods should.</p>

<p>NOTE: <code>type</code> is ignored and is only there to make porting easier.</p>

<p>Equivalent to <a href="../Test/LifecycleHooks.html#method-i-setup"><code>Minitest::Test#setup</code></a>.</p>
                                <div class="method-calls-super">
                                  Calls superclass method
                                  
                              </div>

                              <div class="method-source-code" id="before-source">
            <pre><span class="ruby-comment"># File minitest-5.20.0/lib/minitest/spec.rb, line 191</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">before</span> <span class="ruby-identifier">_type</span> = <span class="ruby-keyword">nil</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
  <span class="ruby-identifier">define_method</span> <span class="ruby-value">:setup</span> <span class="ruby-keyword">do</span>
    <span class="ruby-keyword">super</span>()
    <span class="ruby-keyword">self</span>.<span class="ruby-identifier">instance_eval</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>)
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-it" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">it</span><span
                                class="method-args">(desc = &quot;anonymous&quot;, &amp;block)</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Define an expectation with name <code>desc</code>. Name gets morphed to a proper test method name. For some freakish reason, people who write specs don’t like class inheritance, so this goes way out of its way to make sure that expectations aren’t inherited.</p>

<p>This is also aliased to <a href="DSL.html#method-i-specify"><code>specify</code></a> and doesn’t require a <code>desc</code> arg.</p>

<p>Hint: If you <em>do</em> want inheritance, use minitest/test. You can mix and match between assertions and expectations as much as you want.</p>

                              <div class="method-source-code" id="it-source">
            <pre><span class="ruby-comment"># File minitest-5.20.0/lib/minitest/spec.rb, line 223</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">it</span> <span class="ruby-identifier">desc</span> = <span class="ruby-string">&quot;anonymous&quot;</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
  <span class="ruby-identifier">block</span> <span class="ruby-operator">||=</span> <span class="ruby-identifier">proc</span> { <span class="ruby-identifier">skip</span> <span class="ruby-string">&quot;(no tests defined)&quot;</span> }

  <span class="ruby-ivar">@specs</span> <span class="ruby-operator">||=</span> <span class="ruby-value">0</span>
  <span class="ruby-ivar">@specs</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>

  <span class="ruby-identifier">name</span> = <span class="ruby-string">&quot;test_%04d_%s&quot;</span> <span class="ruby-operator">%</span> [ <span class="ruby-ivar">@specs</span>, <span class="ruby-identifier">desc</span> ]

  <span class="ruby-identifier">undef_klasses</span> = <span class="ruby-keyword">self</span>.<span class="ruby-identifier">children</span>.<span class="ruby-identifier">reject</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">c</span><span class="ruby-operator">|</span> <span class="ruby-identifier">c</span>.<span class="ruby-identifier">public_method_defined?</span> <span class="ruby-identifier">name</span> }

  <span class="ruby-identifier">define_method</span> <span class="ruby-identifier">name</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>

  <span class="ruby-identifier">undef_klasses</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">undef_klass</span><span class="ruby-operator">|</span>
    <span class="ruby-identifier">undef_klass</span>.<span class="ruby-identifier">send</span> <span class="ruby-value">:undef_method</span>, <span class="ruby-identifier">name</span>
  <span class="ruby-keyword">end</span>

  <span class="ruby-identifier">name</span>
<span class="ruby-keyword">end</span></pre>
                              </div>
                            </div>

                            <div class="aliases">
                              Also aliased as: <a href="DSL.html#method-i-specify">specify</a>
                            </div>

                          </div>

                  <div id="method-i-let" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">let</span><span
                                class="method-args">(name, &amp;block)</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Essentially, define an accessor for <code>name</code> with <code>block</code>.</p>

<p>Why use let instead of def? I honestly don’t know.</p>

                              <div class="method-source-code" id="let-source">
            <pre><span class="ruby-comment"># File minitest-5.20.0/lib/minitest/spec.rb, line 247</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">let</span> <span class="ruby-identifier">name</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
  <span class="ruby-identifier">name</span> = <span class="ruby-identifier">name</span>.<span class="ruby-identifier">to_s</span>
  <span class="ruby-identifier">pre</span>, <span class="ruby-identifier">post</span> = <span class="ruby-node">&quot;let &#39;#{name}&#39; cannot &quot;</span>, <span class="ruby-string">&quot;. Please use another name.&quot;</span>
  <span class="ruby-identifier">methods</span> = <span class="ruby-constant">Minitest</span><span class="ruby-operator">::</span><span class="ruby-constant">Spec</span>.<span class="ruby-identifier">instance_methods</span>.<span class="ruby-identifier">map</span>(<span class="ruby-operator">&amp;</span><span class="ruby-value">:to_s</span>) <span class="ruby-operator">-</span> <span class="ruby-node">%w[subject]</span>
  <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;#{pre}begin with &#39;test&#39;#{post}&quot;</span> <span class="ruby-keyword">if</span>
    <span class="ruby-identifier">name</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp">/\Atest/</span>
  <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-node">&quot;#{pre}override a method in Minitest::Spec#{post}&quot;</span> <span class="ruby-keyword">if</span>
    <span class="ruby-identifier">methods</span>.<span class="ruby-identifier">include?</span> <span class="ruby-identifier">name</span>

  <span class="ruby-identifier">define_method</span> <span class="ruby-identifier">name</span> <span class="ruby-keyword">do</span>
    <span class="ruby-ivar">@_memoized</span> <span class="ruby-operator">||=</span> {}
    <span class="ruby-ivar">@_memoized</span>.<span class="ruby-identifier">fetch</span>(<span class="ruby-identifier">name</span>) { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span><span class="ruby-operator">|</span> <span class="ruby-ivar">@_memoized</span>[<span class="ruby-identifier">k</span>] = <span class="ruby-identifier">instance_eval</span>(<span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>) }
  <span class="ruby-keyword">end</span>
<span class="ruby-keyword">end</span></pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-register_spec_type" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">register_spec_type</span><span
                                class="method-args">(*args, &amp;block)</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Register a new type of spec that matches the spec’s description. This method can take either a Regexp and a spec class or a spec class and a block that takes the description and returns true if it matches.</p>

<p>Eg:</p>

<pre class="ruby"><span class="ruby-identifier">register_spec_type</span>(<span class="ruby-regexp">/Controller$/</span>, <span class="ruby-constant">Minitest</span><span class="ruby-operator">::</span><span class="ruby-constant">Spec</span><span class="ruby-operator">::</span><span class="ruby-constant">Rails</span>)
</pre>

<p>or:</p>

<pre class="ruby"><span class="ruby-identifier">register_spec_type</span>(<span class="ruby-constant">Minitest</span><span class="ruby-operator">::</span><span class="ruby-constant">Spec</span><span class="ruby-operator">::</span><span class="ruby-constant">RailsModel</span>) <span class="ruby-keyword">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">desc</span><span class="ruby-operator">|</span>
  <span class="ruby-identifier">desc</span>.<span class="ruby-identifier">superclass</span> <span class="ruby-operator">==</span> <span class="ruby-constant">ActiveRecord</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>
<span class="ruby-keyword">end</span>
</pre>

                              <div class="method-source-code" id="register_spec_type-source">
            <pre><span class="ruby-comment"># File minitest-5.20.0/lib/minitest/spec.rb, line 146</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">register_spec_type</span> <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
  <span class="ruby-keyword">if</span> <span class="ruby-identifier">block</span> <span class="ruby-keyword">then</span>
    <span class="ruby-identifier">matcher</span>, <span class="ruby-identifier">klass</span> = <span class="ruby-identifier">block</span>, <span class="ruby-identifier">args</span>.<span class="ruby-identifier">first</span>
  <span class="ruby-keyword">else</span>
    <span class="ruby-identifier">matcher</span>, <span class="ruby-identifier">klass</span> = <span class="ruby-operator">*</span><span class="ruby-identifier">args</span>
  <span class="ruby-keyword">end</span>
  <span class="ruby-constant">TYPES</span>.<span class="ruby-identifier">unshift</span> [<span class="ruby-identifier">matcher</span>, <span class="ruby-identifier">klass</span>]
<span class="ruby-keyword">end</span></pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-spec_type" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">spec_type</span><span
                                class="method-args">(desc, *additional)</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Figure out the spec class to use based on a spec’s description. Eg:</p>

<pre class="ruby"><span class="ruby-identifier">spec_type</span>(<span class="ruby-string">&quot;BlahController&quot;</span>) <span class="ruby-comment"># =&gt; Minitest::Spec::Rails</span>
</pre>

                              <div class="method-source-code" id="spec_type-source">
            <pre><span class="ruby-comment"># File minitest-5.20.0/lib/minitest/spec.rb, line 160</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">spec_type</span> <span class="ruby-identifier">desc</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">additional</span>
  <span class="ruby-constant">TYPES</span>.<span class="ruby-identifier">find</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">matcher</span>, <span class="ruby-identifier">_klass</span><span class="ruby-operator">|</span>
    <span class="ruby-keyword">if</span> <span class="ruby-identifier">matcher</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-value">:call</span> <span class="ruby-keyword">then</span>
      <span class="ruby-identifier">matcher</span>.<span class="ruby-identifier">call</span> <span class="ruby-identifier">desc</span>, <span class="ruby-operator">*</span><span class="ruby-identifier">additional</span>
    <span class="ruby-keyword">else</span>
      <span class="ruby-identifier">matcher</span> <span class="ruby-operator">===</span> <span class="ruby-identifier">desc</span>.<span class="ruby-identifier">to_s</span>
    <span class="ruby-keyword">end</span>
  }.<span class="ruby-identifier">last</span>
<span class="ruby-keyword">end</span></pre>
                              </div>
                            </div>


                          </div>

                  <div id="method-i-specify" class="method-detail method-alias">
                            <div class="method-heading">
                              <span class="method-name">specify</span><span
                                class="method-args">(desc = &quot;anonymous&quot;, &amp;block)</span>
                            </div>

                            <div class="method-description">
                              

                            </div>


                            <div class="aliases">
                              Alias for: <a href="DSL.html#method-i-it">it</a>
                            </div>
                          </div>

                  <div id="method-i-subject" class="method-detail ">
                            <div class="method-heading">
                              <span class="method-name">subject</span><span
                                class="method-args">(&amp;block)</span>
                              <span class="method-click-advice">click to toggle source</span>
                            </div>

                            <div class="method-description">
                              <p>Another lazy man’s accessor generator. Made even more lazy by setting the name for you to <code>subject</code>.</p>

                              <div class="method-source-code" id="subject-source">
            <pre><span class="ruby-comment"># File minitest-5.20.0/lib/minitest/spec.rb, line 266</span>
<span class="ruby-keyword">def</span> <span class="ruby-identifier ruby-title">subject</span> <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
  <span class="ruby-identifier">let</span> <span class="ruby-value">:subject</span>, <span class="ruby-operator">&amp;</span><span class="ruby-identifier">block</span>
<span class="ruby-keyword">end</span></pre>
                              </div>
                            </div>


                          </div>

                          </section>

              </section>
              </main>



            </div>  <!--  class='wrapper hdiv' -->


<footer id="validator-badges" role="contentinfo">
<p><a href="https://validator.w3.org/check/referer">Validate</a></p>
<p>Generated by <a href="https://ruby.github.io/rdoc/">RDoc</a> 6.4.0.</p>
<p>Based on <a href="https://github.com/ged/darkfish/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.</p>

  
    <p><p><a href="https://ruby-doc.org">Ruby-doc.org</a> is provided by <a href="https://jamesbritt.com">James Britt</a> and <a href="https://neurogami.com">Neurogami</a>.</p><p><a href="https://jamesbritt.bandcamp.com/">Maximum R+D</a>.  </p>
</p>
  
  </footer>

<script type="text/javascript">


  let ads  = $("#carbonads-container").children().detach();


  function swapMode() {
    var cookieName = 'darkmode';
    var cssDarkmode = Cookies.get(cookieName);
    console.log("***** swapMode! " + cssDarkmode + " *****");


    if (cssDarkmode == "true") {
      console.log("We have dark mode, set the css to light ...");
      $('#rdoccss').attr("href", defaultModeCssHref);
      $('#cssSelect').text("Dark mode");
      cssDarkmode = "false";
      console.log("swapMode! Now set cookie to " + cssDarkmode);
      Cookies.set(cookieName, cssDarkmode);

    } else {
      console.log("We not have dark mode, set the css to dark ...");
      $('#rdoccss').attr("href", darkModeCsseHref);
      $('#cssSelect').text("Light mode");
      cssDarkmode = "true";
      console.log("swapMode! Now set cookie to " + cssDarkmode);
      Cookies.set(cookieName, cssDarkmode);

    }

    console.log("  --------------- ");
  }


const vueCssApp = new Vue({
el: '#menubar',
data: {
isDark: false
},
methods: {
toggleClass: function(event){
this.isDark = !this.isDark;
}
}
})

const vueApp = new Vue({
el: '#vapp',
data: { 
isOpen: true
},

mounted() {
this.handleResize();
this.manage_mob_classes();
window.addEventListener('resize', this.handleResize)
//this.isOpen !=  (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
},
destroyed() {
window.removeEventListener('resize', this.handleResize)
},
created() {
//manage_mob_classes();
},

methods : {
isMobile() {
  return (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent));
},

  handleResize() {
    if (!this.isMobile()) {
      this.isOpen = window.innerWidth > 800;
    }
  },

  manage_mob_classes() {
    if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
      $("nav").addClass("mob_nav");
      $("main").addClass("mob_main");
      $("#extraz").addClass("mob_extraz");
      $("#carbonads-container").addClass("mob_carbonads-container");
      this.isOpen  = false;
    } else {
      $("nav").removeClass("mob_nav") 
        $("main").removeClass("mob_main");
      $("#extraz").removeClass("mob_extraz");
      $("#carbonads-container").removeClass("mob_carbonads-container");
      this.isOpen  = true;
    }
  },

  toggleNav() {
    this.isOpen =! this.isOpen ;
    // alert("Toggle nav!");
    console.log("toggleNav() click: " + this.isOpen );
  }
}
})

$("#carbonads-container").append(ads);


$(function() {

    var darkmode = Cookies.get("darkmode");
    console.log("Document ready: " + darkmode);

    if ( darkmode  == "true" ) {
      $('#cssSelect').text("Light mode");
    } else {
      $('#cssSelect').text("Dark mode");
     }

    $('body').css('display','block');
    });

</script>

    
  </body> 
</html>

